#!/usr/bin/python3
# -*- coding: UTF-8 -*-

"""
- 首先，执行 try 子句
- 如果没有异常发生，则跳过 except 子句并完成 try 语句的执行
- 如果在执行 try 子句时发生了异常，则跳过该子句汇总剩下的部分。然后异常的类型和 except 关键字后面的异常匹配，则执行 except 子句，然后继续执行 try 语句之后的代码
- 如果发生的异常和 except 子句中指定的异常不匹配，则将其传递打哦哇喔不的 try 语句中；
- 没有没有找到处理程序，则它是一个未处理异常，执行将停止并显示如上所示的信息
- finally 子句不论 try 语句是否发生异常都会执行；
- try 语句中包含 break，continue，return语句时，则在执行这些过程中先执行 finally 子句
- 如果 finally 子句中包含 return，则 finally子句的 return 语句将在执行 try 子句的 return 语句之前取代后者被执行；
- finally 子句对于释放外部资源(文件，网络连接)非常有用
"""
while True:
    try:
        x = int(input("Please enter a number: "))
        break
    except ValueError:
        print("Oops!  That was no valid number. Try again...")
    except OSError as oserror:
        print("OSError !", oserror)
    except AssertionError:
        raise  # 抛出异常
    finally:
        print('Always excute! ')


def bool_return():
    try:
        return True
    finally:
        return False


print(bool_return)


def divide(x, y):
    try:
        result = x / y
    except ZeroDivisionError:
        print("division by zero!")
    else:
        print("result is", result)
    finally:
        print("executing finally clause")


divide(4, 0)
divide(4, 2)


for line in open("mylife.txt"):
    print(line, end="")

# 预定义清理操纵，自动释放资源
with open("mylife.txt") as f:
    for line in f:
        print(line, end="")

